var express = require('express');
const cart = require('../sql/cart');
const order = require('../sql/order');
var router = express.Router();

const sql = require("../sql/sql")
const tools = require("../tools/index");

// 自定义一个 订单生成器 不包含字符
function creatOrderId () { 
    return Date.now() + parseInt(Math.random() * 10000)
}

/**
* @apiGroup 订单
* @api {post} /api/order添加订单
* @apiVersion 0.0.0
* @apiDescription 根据用户id和购物车数据，添加订单
* @apiParam {String} userId 用户Id
* @apiParam {String} proData 订单商品详情
* @apiSuccess {number} state 请求状态
* @apiSuccess {string} title 请求说明
* @apiSuccessExample {json} Success-Response:
* {
*    "state":200,
*    "title":"请求成功",
* }
* @apiSampleRequest http://localhost:3000/api/order
*/

// 添加订单接口
router.post('/',function(req,res,next){
    // 获取前端数据
    const {userId, proData } = req.body;
    const token = req.headers.token;
    // console.log(proData,1111)
    // 对登陆状态token进行验证
    tools.verify(token).then((a) => {
        // 插入订单数据
        sql.insert(order, {
            orderId: creatOrderId(),
            userId: userId,
            proData:proData,
            time:Date.now(),
            state: 0
        }).then(() => {
            // 添加完商品数据的时候，也要清空购物车内的当前数据
            sql.find(cart,{userId}).then(data => {
                // 不要直接操作数据库中的数据
                let arr = data[0].proData
                // 利用数组中的filter过滤  只返回选中状态为true的值
                arr = arr.filter(val => {
                    return !val.flag
                })
                // 更新购物车中的数据数据
                sql.update(cart,{userId},{
                    proData: arr
                }).then(()=>{
                    res.send({
                        state:200,
                        title:"添加待付款订单成功"
                    })
                })
            })
        })
    })
    .catch(()=>{
        res.send({
            state: 10086,
            title: "登陆信息已失效，请重新登陆123"
        })
    })
})

/**
* @apiGroup 订单
* @api {get} /api/order/add 获取订单
* @apiVersion 0.0.0
* @apiDescription 根据用户id获取订单
* @apiParam {String} userId 用户Id
* @apiSuccess {number} state 请求状态
* @apiSuccess {Array} data 请求数据
* @apiSuccessExample {json} Success-Response:
* {
*    "state":200,
*    "title":"请求成功",
*    "data":"[{},{},{}]",
* }
* @apiSampleRequest http://localhost:3000/api/order/add
*/

// 获取订单接口
router.get('/add',function(req,res,next){
    // 获取前端数据
    const { userId } = req.query;
    const token = req.headers.token;
    // 对登陆状态token进行验证
    tools.verify(token).then((a) => {
        // 插入订单数据
        sql.find(order, {userId}, {_id:0, __v:0}).then(data => {
            res.send({
                state: 200,
                title: "订单获取成功",
                data
            })
        })
    })
    .catch(()=>{
        res.send({
            state: 10086,
            title: "登陆信息已失效，请重新登陆123"
        })
    })
})

/**
* @apiGroup 订单
* @api {post} /api/order/detail 获取订单详情
* @apiVersion 0.0.0
* @apiDescription 根据用户id 订单id获取订单详情
* @apiParam {String} userId 用户Id
* @apiParam {String} orderId 订单Id
* @apiSuccess {number} state 请求状态
* @apiSuccess {Array} data 请求数据
* @apiSuccessExample {json} Success-Response:
* {
*    "state":200,
*    "title":"订单详情获取成功",
*    "data":{}
* }
* @apiSampleRequest http://localhost:3000/api/order/detail
*/

// 获取订单接口
router.post('/detail',function(req,res,next){
    // 获取前端数据
    const { userId, orderId } = req.body;
    const token = req.headers.token;
    // 对登陆状态token进行验证
    tools.verify(token).then((a) => {
        // 插入订单数据
        sql.find(order, {userId, orderId}, {_id:0, __v:0}).then(data => {
            console.log(data, 8888)
            res.send({
                state: 200,
                title: "订单详情获取成功",
                data: data[0]
            })
        })
    })
    .catch(()=>{
        res.send({
            state: 10086,
            title: "登陆信息已失效，请重新登陆123"
        })
    })
})

/**
* @apiGroup 支付
* @api {post} /api/order/pay 修改支付状态
* @apiVersion 0.0.0
* @apiDescription 根据用户id 订单id 修改支付状态
* @apiParam {String} userId 用户Id
* @apiParam {String} orderId 用户Id
* @apiSuccess {number} state 请求状态
* @apiSuccess {Array} data 请求数据
* @apiSuccessExample {json} Success-Response:
* {
*    "state":200,
*    "title":"修改成功",
* }
* @apiSampleRequest http://localhost:3000/api/order/pay
*/

// 修改订单接口
router.post('/pay',function(req,res,next){
    // 获取前端数据
    const { userId, orderId } = req.body;
    const token = req.headers.token;
    // 对登陆状态token进行验证
    tools.verify(token).then((a) => {
        // 插入订单数据
        // 使用两个条件进行查询 更加的精准
        sql.update(order, {userId, orderId}, {
            state: 1
        }).then(() => {
            res.send({
                state: 200,
                title: "修改成功"
            })
        })
    })
    .catch(()=>{
        res.send({
            state: 10086,
            title: "登陆信息已失效，请重新登陆123"
        })
    })
})
/**
* @apiGroup 支付
* @api {post} /api/order/sign 修改签收状态
* @apiVersion 0.0.0
* @apiDescription 根据用户id 订单id 修改签收状态
* @apiParam {String} userId 用户Id
* @apiParam {String} orderId 用户Id
* @apiSuccess {number} state 请求状态
* @apiSuccess {Array} data 请求数据
* @apiSuccessExample {json} Success-Response:
* {
*    "state":200,
*    "title":"修改成功",
* }
* @apiSampleRequest http://localhost:3000/api/order/sign
*/

// 修改订单接口
router.post('/sign',function(req,res,next){
    // 获取前端数据
    const { userId, orderId } = req.body;
    const token = req.headers.token;
    // 对登陆状态token进行验证
    tools.verify(token).then((a) => {
        // 插入订单数据
        // 使用两个条件进行查询 更加的精准
        sql.update(order, {userId, orderId}, {
            state: 3
        }).then(() => {
            res.send({
                state: 200,
                title: "修改成功"
            })
        })
    })
    .catch(()=>{
        res.send({
            state: 10086,
            title: "登陆信息已失效，请重新登陆123"
        })
    })
})

/**
* @apiGroup 支付
* @api {post} /api/order/del 删除待支付订单
* @apiVersion 0.0.0
* @apiDescription 根据用户id 订单id 删除待支付订单
* @apiParam {String} userId 用户Id
* @apiParam {String} orderId 订单Id
* @apiSuccess {number} state 请求状态
* @apiSuccess {Array} data 请求数据
* @apiSuccessExample {json} Success-Response:
* {
*    "state":200,
*    "title":"删除成功",
* }
* @apiSampleRequest http://localhost:3000/api/order/del
*/

// 删除订单接口
router.post('/del',function(req,res,next){
    // 获取前端数据
    const { userId, orderId } = req.body;
    const token = req.headers.token;
    // 对登陆状态token进行验证
    tools.verify(token).then((a) => {
        // 插入订单数据
        // 使用两个条件进行查询 更加的精准
        sql.delete(order, {userId, orderId},num=1).then(() => {
            res.send({
                state: 200,
                title: "删除成功"
            })
        })
    })
    .catch(()=>{
        res.send({
            state: 10086,
            title: "登陆信息已失效，请重新登陆123"
        })
    })
})
module.exports = router;
